﻿<Authorize()>
Public Class PediatraAsindoController
    Inherits BaseController(Of PediatraAsindo)

    Private ReadOnly repoPaciente_ As PacienteRepository
    Private ReadOnly repoTipoVía_ As TipoVíaRepository
    Private ReadOnly repoPoblación_ As PoblaciónRepository
    Private ReadOnly repoDirección_ As DirecciónRepository
    Private ReadOnly repoPediatraAsindo_ As PediatraAsindoRepository


    Public Sub New(ByVal repoPediatraAsindo As PediatraAsindoRepository, ByVal saver As ContextSaver,
        ByVal repoPacientes As PacienteRepository,
        ByVal repoTipoVía As TipoVíaRepository,
        ByVal repoPoblación As PoblaciónRepository,
        ByVal repoDirección As DirecciónRepository)
        MyBase.New(repoPediatraAsindo, saver)
        repoPaciente_ = repoPacientes
        repoTipoVía_ = repoTipoVía
        repoPoblación_ = repoPoblación
        repoDirección_ = repoDirección
        repoPediatraAsindo_ = repoPediatraAsindo
    End Sub

    '
    ' GET: /PediatraAsindo/Lista
    Function Lista() As ActionResult
        Return Mostrar(repoPediatraAsindo_.All.Include("Dirección.Población").Include("Pacientes").Include("Avisos").Include("Dirección.TipoVía"), _
                             "Pediatras de ASINDO")
    End Function

    '
    ' GET: /PediatraAsindo/Crear
    Function Crear() As ActionResult
        Dim ped = repoPediatraAsindo_.CreateDetached
        Return Mostrar(ped, "Nuevo " & ped.NombreEntidad)
    End Function


    '
    ' POST: /PediatraAsindo/Crear

    <HttpPost()>
    Function Crear(ByVal pediatra As PediatraAsindo, <Bind(Prefix:="midir")> ByVal direcForm As Dirección) As ActionResult
        Try
            repoPediatraAsindo_.Add(pediatra, save:=False)
            pediatra.Dirección = repoDirección_.AddIfNotExists(direcForm)
            Saver.Save()
            TempData("info") = String.Format("Pediatra {0} guardado correctamente", pediatra.NombreCompleto)

            Return RedirectToAction("Lista")
        Catch ex As Exception
            Dim ped = repoPediatraAsindo_.CreateDetached
            Return Mostrar(ped, "Nuevo " & ped.NombreEntidad, "Error al crear pediatra: " & ex.Message)
        End Try
    End Function

    '
    ' GET: /PediatraAsindo/Editar/5

    Function Editar(ByVal id As Integer) As ActionResult
        Dim ped = repoPediatraAsindo_.GetByID(id, "Dirección")
        Return Mostrar(ped, ped.NombreEntidad)
    End Function

    <HttpPost()> _
    Function Editar(ByVal id As Integer, <Bind(Prefix:="midir")> ByVal direcForm As Dirección) As ActionResult
        Dim ped = repoPediatraAsindo_.GetByID(id)
        Try
            UpdateModel(ped)

            ped.Dirección = repoDirección_.AddIfNotExists(direcForm)
            repoDirección_.BorrarHuérfanas()
            Saver.Save()

            TempData("info") = String.Format("{0} modificado correctamente", ped.NombreEntidad)
            Return RedirectToAction("Lista")
        Catch ex As Exception
            Return Mostrar(ped, ped.NombreEntidad, "Error al editar pediatra: " & ex.Message)
        End Try
    End Function

    <HttpPost()>
    Function Borrar(ByVal id As Integer) As ActionResult
        Dim ped = repoPediatraAsindo_.GetByID(id)
        Try
            repoPediatraAsindo_.Delete(ped, save:=False)
            repoDirección_.BorrarHuérfanas()
            Saver.Save()
            TempData("info") = String.Format("{0} modificado correctamente", ped.NombreEntidad)
            Return RedirectToAction("Lista")
        Catch ex As Exception
            Return Mostrar(ped, ped.NombreEntidad, "Error al borrar pediatra: " & ex.Message)
        End Try
    End Function

    Protected Overrides Sub CargarDatosComunes()
        ViewData("ListaPoblaciones") = repoPoblación_.Desplegable
        ViewData("ListaTiposVia") = repoTipoVía_.Desplegable
    End Sub

    Protected Overrides Function VistaFormulario() As String
        Return "FormPediatraAsindo"
    End Function

    Protected Overrides Function VistaLista() As String
        Return "ListaPediatrasAsindo"
    End Function

End Class
